package com.zoweunion.mechanic.dao.app;

import com.zoweunion.mechanic.model.app.ViewBoardMenu;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

@Mapper
@Component
public interface ToolViewBoardMapper {

    Map<String, Object> todayStatistics(@Param("precinctRegions") String precinctRegions, @Param("sId") String sId);

    /**
     * 获取工单列表
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> listOrderInfo(Map<String, Object> reqMap);

    /**
     * 通过角色查询对应菜单
     * @param rId
     * @return
     */
    List<ViewBoardMenu> listViewBoardByRole(@Param("rId") String rId);

    /**
     * 实时工单列表
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> listRealTimeOrder(Map<String, Object> reqMap);

    /**
     * 获取故障类型名称集
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> ListDictionariesNameBySId(Map<String, Object> reqMap);

    /**
     * 故障类型统计
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> pieFaultTypeStatistics(Map<String, Object> reqMap);

    /**
     * 工单类型统计
     * 车主和服务商页面之间的区别，就在于是否传递oId,传参就是车主页面
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> pieOrderTypeStatistics(Map<String, Object> reqMap);

    /**
     * 工单统计
     * @param reqMap
     * @return
     */
    Map<String, Object> getOrderStatisticsData(Map<String, Object> reqMap);

    /**
     * 工单统计-柱状图
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getOrderStatisticsHistogram(Map<String, Object> reqMap);

    /**
     * 维修统计-工单统计(完成工单，返修率，均维修时间)
     * @param reqMap
     * @return
     */
    Map<String, Object> getRepairOrderStatistics(Map<String, Object> reqMap);

    /**
     * 维修统计-修工综合能力排名
     * @param reqMap
     * @return
     */
    List<Map<String, Object>>listMaintainRepairAbility(Map<String, Object> reqMap);

    /**
     * 额度预警-信用额度预警
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> listOrderWarningCreditAmount(Map<String, Object> reqMap);

    /**
     * 营收统计-营收统计
     * @param reqMap
     * @return
     */
    Map<String, Object> getPaymentStatistics(Map<String, Object> reqMap);

    /**
     * 营收统计-营收情况
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getRevenueStatistics(Map<String, Object> reqMap);

    /**
     * 营收统计-支付类型统计
     * 车主和服务商页面之间的区别，就在于是否传递oId,传参就是车主页面
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getPaymentTypeStatistics(Map<String, Object> reqMap);

    /**
     * 客户分布-客户统计
     * @param reqMap
     * @return
     */
    Map<String, Object> getCustomerStatistics(Map<String, Object> reqMap);

    /**
     * 客户统计-客户分布柱状图
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> getCustomerDistributedStatistics(Map<String, Object> reqMap);

    /**
     * 客户分布-客户总数列表
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> listCustomerTotalOrder(Map<String, Object> reqMap);

    /**
     * 客户分布-需维护客户
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> listNeedMaintainCustomer(Map<String, Object> reqMap);

    /**
     * 获取用户信息
     * @param reqMap
     * @return
     */
    Map<String, Object> getUserInfoByUserId(Map<String, Object> reqMap);

    /**
     * 根据userid获取车辆列表
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> listCarByUserId(Map<String, Object> reqMap);

    /**
     * 根据userid获取车辆列表
     * @param reqMap
     * @return
     */
    List<Map<String, Object>> listCarByUserIdNew(Map<String, Object> reqMap);

    /**
     * 是否有某个省份名称
     * @param provinceName
     * @return
     */
    int hasProvinceName(@Param("provinceName") String provinceName);

    /**
     * 是否有某个城市名称
     * @param cityName
     * @return
     */
    int hasCityName(@Param("cityName") String cityName);

    /**
     * 是否有某个区域名称
     * @param areaName
     * @return
     */
    int hasAreaName(@Param("areaName") String areaName);

    /**
     * 工单速报 获取今日 待服务 待回款 待支付
     * @param date
     * @return
     */
    List<Map<String, Object>> getOrderNews(@Param("date") LocalDate date, @Param("map") Map<String, Object> map);

    /**
     * 车辆速报 获取今日 车辆在线数量 车辆故障报修数量
     * @param date
     * @return
     */
    List<Map<String, Object>> getCarNews(@Param("date") LocalDate date, @Param("map") Map<String, Object> map);

    /**
     * 获取服务商下的统计工时
     * @param sId
     * @param date
     * @return
     */
    List<String> listWorkHoursJsonBySid(@Param("sId") String sId, @Param("date") LocalDate date);

    Integer selectFaultCount(@Param("id") String id,@Param("sId") String sId,@Param("oId") String oId);
}
